The present invention relates to data processing and more particularly to a method, system and program product for managing a virtual machine.
The concept of virtualization is an extremely significant one in the field of data processing. Generally speaking, virtualization is a broad concept that is commonly associated with partitioning of real data processing resources; i.e., making a single data processing resource, such as a server or data storage device or operating system or application, appear to function as multiple logical or virtual resources. The concept is broad enough to also include aggregation of real data processing resources; i.e., making multiple physical resources, such as servers or data storage devices, appear as a single logical resource.
There are numerous reasons for using virtualization concepts in data processing. Virtual machines can be used to consolidate workloads of different servers to fewer machines, which may reduce both hardware costs and the costs of administering and maintaining the needed server infrastructure.
Virtual machines also make it easier to control the reallocation of real resources where one or more applications running on a real resource, such as a server, has a cyclical demand profile. For example, a server located on the East coast of the United States might run, among other things, a phone number lookup application. The demands of such an application will be tied closely to the time of day and day of the week with peak usage likely to occur between 9:00 AM and 5:00 PM Monday through Friday and minimum usage likely to occur between midnight and 6:00 AM and on Saturdays and Sundays.
Running such applications in virtual machines makes it easier to shut down unneeded virtual machines during periods of minimum use, which allows real resources to be released for other purposes; e.g., batch processing of transaction data. Similarly, where virtual machines are running on several different underutilized hosts, a situation that can occur during off-peak hours for a virtual machine application, costs may be saved by consolidating those virtual machines onto a single host and shutting down the other hosts.
Virtual machines can be used in load balancing (load sharing) applications where multiple servers are used to share multiple user requests to access a common application or data repository. A number of well-known techniques are used to distribute the user requests among the servers with a goal of avoiding overloading a single server.
Legacy applications (that is, applications developed for an earlier generation of software or hardware products) may be accommodated on a virtual machine configured to have the appearance of the earlier generation of products long after those products are no longer available, at least available to the system operator with a need to run the legacy application.
Virtual machines support debugging and performance monitoring of both hardware and software, including operating systems. Debugging tools and performance monitoring tools can be run in a virtual machine that is isolated from the hardware or software being debugged or tested.
Virtual machines can be configured with read/write/access restrictions that provide secure, isolated environments, often referred to as sandboxes, for running untrusted applications. Because virtual machines configured this way can isolate what they run, they provide fault and error containment. Faults, both unexpected ones and those deliberately injected into the machine environment during testing, can be handled without significantly jeopardizing the physical resources used in implementing the virtual machine or a set of virtual machines.
Where used for resource aggregation, virtual machines can enable a system operator to aggregate the capabilities of multiple physical devices (for example, data storage devices, in order to manage a workload that would overwhelm any one of the multiple physical devices.
The above-list is not intended to be exhaustive as there are many other reasons for using virtualization in implementing solutions to data processing problems.
A virtual machine is managed in part in accordance with an availability policy that defines how the virtual machine will deal with both predicted events (predicted failures), expected/scheduled events (such as planned maintenance shutdowns) and unpredicted events such as failures of one or more of the real resources that support the virtual machine operation. The policy that defines virtual machine response to predicted and expected/scheduled events is often referred to as the migration policy for the virtual machine. The policy that defines how the virtual machine will deal with unpredicted events or actual failures is often referred to as the recovery policy for the virtual machine.
A standard practice has been for a system administrator to initially define the availability policy for a particular virtual machine and to manually make any desired changes in that availability policy once the initial policy had been established. This involves overriding defaults for a cluster, a node, and individual machines in a repetitive manner.